home *** CD-ROM | disk | FTP | other *** search
/ Hottest 6 / Hottest 6 (1996)(PDSoft)[!].iso / software / emulators / tap3zxs / source / zxs3tap.c < prev   
C/C++ Source or Header  |  1978-11-24  |  3KB  |  124 lines

  1. /*  Convert .ZXS file from stdin to .TAP file to stdout.
  2. stderr for report/list
  3. (C)1995 @BABOLO V.M 1.2 29.06.95
  4. My e-mail address is: babolo@relcom.net or babolo@kiae.su
  5. My web is: http://relcom.eu.net/zx/
  6. Help me to collect all ZX software
  7. */
  8.  
  9. /* MSDOS version created 8/7/95 B.Baylis@cs.ucl.ac.uk */
  10.  
  11. /* This file was modified when I created the MSDOS version
  12.  
  13.    stdin and stdout are no longer used, the .ZXS input is first parameter on
  14.    command line, and the .TAP output the second parameter.
  15.  
  16.    This was done so I use could the convertors with batch files and aliases
  17.  
  18. */
  19.  
  20.  
  21. #include <sys/types.h>
  22. #include <sys/stat.h>
  23. #include <stdio.h>
  24. #define TF stderr
  25. /*#define IF stdin*/
  26. /*#define OF stdout*/
  27. #define DB(h,l) ((((h)&0377)<<8)+((l)&0377))
  28. #include "cnvout.h"
  29.  
  30. FILE * IF;
  31. FILE * OF;
  32.  
  33. int byt, blk, nu, i;
  34. char x;
  35.  
  36. static void pt(c)
  37.     int c;
  38. {   c&=0377; 
  39.     fputc(c,OF); 
  40.     x^=c;
  41.     if(((byt++)&~0777)!=0){ blk++; byt&=0777;};
  42. };
  43.  
  44. static int gc()
  45. {   int c;
  46.     c=fgetc(IF);
  47.     if(c==EOF){fprintf(TF," length underflow\n"); exit(1); };
  48.     return(c&0377);
  49. };
  50.  
  51. int main(argc, argv) int argc; char *argv[];
  52. {   char hd[19];
  53.     int hdp, b, b0, b1;
  54.     long l;
  55.  
  56. /* modified file access */
  57.     IF=fopen(argv[1],"rb");
  58.     
  59.     OF=fopen(argv[2],"wb");
  60.  
  61.     for(nu=0,byt=0,blk=0
  62.     ;   EOF!=(b0=getc(IF))
  63.         &&  EOF!=(b1=getc(IF))
  64.         &&  (0!=(l=DB(b1,b0)))
  65.     ;)
  66.  
  67.     {   dp(nu++,3);
  68.  
  69.         switch(l){
  70.         case 1: fprintf(TF," not realised\n"); exit(1);
  71.         case 2: pl1(" Wait       "); goto eo;
  72.         case 3: b=gc(); pl2(" Key/%c      ",b); goto eo;
  73.         case 4: b0=gc(); l=DB(b1=gc(),b0); pl2(" Wait:%-5lu ",l); goto eo;
  74.         case 5:
  75.             b=gc(); b0=gc(); b1=gc(); l=DB(b1,b0);
  76.             pl3(" Key/%c:%-5u",b,l);
  77.         eo: pl1("                               "); goto ee;
  78.         default:
  79.             l-=5; pt(l); pt ((l)>>8);
  80.             p2e(l-2);
  81.  
  82.             if((gc()|gc()|gc())!=0)
  83.             {   fprintf(TF," not convertable\n"); exit(1);
  84.             };
  85.  
  86.             for(x=0,i=0;((hdp=i)<19)&&(i!=l);i++)pt(hd[i]=b=gc());
  87.  
  88.             if((hdp>1)&&(hd[0]==0))
  89.             {   p1h(hd[1]); pl2("%c",042);
  90.                 for(i=2;(i<12)&&(i<hdp);i++) pcc(hd[i]);
  91.                 pl2("%c",042);
  92.                 for(i=hdp;i<12;i++) bp(1);
  93.                 if(hdp>=12)p2e((hdp==12)?hd[12]:DB(hd[13],hd[12]));else bp(6);
  94.                 if(hdp>=14)p2e((hdp==14)?hd[14]:DB(hd[15],hd[14]));else bp(6);
  95.                 if(hdp>=16)p2e((hdp==16)?hd[16]:DB(hd[17],hd[16]));else bp(6);
  96.             }
  97.             else{
  98.                 p1c(hd[0]); pl1("=");
  99.                 for(i=1;(i<11)&&(i<hdp);i++) pcc(hd[i]);
  100.                 pl1("=                  ");
  101.                 for(i=(hdp>0)?hdp:1;i<11;i++) bp(1);
  102.         };  };
  103.  
  104.         for(i=hdp;i!=l;i++)pt(b=gc());
  105.         p1e(x); bp(1);
  106.     ee: op(blk,4); pl1("/"); op(byt,3); pl1("\n");
  107.     };
  108.  
  109.     if(b0!=EOF)
  110.     {   dp(nu++,3);
  111.         if(b0!=0){ fprintf(TF," Illegal end\n"); exit(1);};
  112.         if(b1==EOF) pl1(" Zero one");
  113.         else
  114.         {   for(i=2;EOF!=(b=getc(IF));i++)b0|=b;
  115.             p2e(i);
  116.             if(b0==0)pl1(" Zeros");
  117.             else     pl1(" Scrap");
  118.         };
  119.         pl1("\n");
  120.     };
  121.     exit(0);
  122. }
  123.  
  124.